package com.rabbit.constant;

import lombok.Getter;

/**
 * <h1>错误码枚举</h1>
 *
 * @author zjw
 * @date 2021/06/23
 */
@Getter
public enum ResultCodeEnum {

    /***
     * 通用的错误码
     */
    SUCCESS(200, "操作成功"),
    NO_OBJECT_FOUND(10001, "请求对象不存在"),
    UNKNOWN_ERROR(10002, "服务器忙，请稍后再试"),
    NO_HANDLER_FOUND(10003, "找不到执行的路径"),
    BIND_EXCEPTION_ERROR(10004, "请求参数错误"),
    ARGUMENTS_NOT_VALID_ERROR(10005, "请求参数不正确"),
    ILLEGAL_ARGUMENT_EXCEPTION(10006, "参数解析失败"),
    ACCESS_DENIED_EXCEPTION(10007, "没有权限访问当前方法"),
    METHOD_NOT_ALLOWED_EXCEPTION(10008, "不支持当前请求方法"),
    HTTP_MEDIA_TYPE_NOT_SUPPORTED_EXCEPTION(10009, "不支持的媒体类型"),
    SQL_EXCEPTION(10010, "SQL执行异常"),
    TOKEN_IP_WRONG(10011, "请求IP与Token不匹配"),
    IDEMPOTENCE_EXCEPTION(10012, "幂等性异常"),

    /**
     * Token相关错误码
     */
    TOKEN_EMPTY(10013, "未检测到会话，请重新登录"),
    TOKEN_ILLEGAL(10014, "登录状态无效，请重新登录"),
    TOKEN_EXPIRE(10015, "登录状态已过期，请重新登录"),
    TOKEN_ROLE_ERROR(10016, "权限不足，无法操作"),
    TOKEN_PERMISSION_ERROR(10017, "权限不足，无法操作"),
    TOKEN_KICK_OUT_ERROR(10018, "您已被管理员踢下线"),

    /**
     * Demo相关错误码
     */
    DEMO_EXCEPTION(10019, "演示模式禁止该操作"),

    /**
     * 登录、验证码相关错误码
     */
    USER_VALID_CODE_EXPIRE_ERROR(10020, "当前验证码已失效"),
    USER_VALID_CODE_NOT_EQUAL_ERROR(10021, "验证码错误"),
    USER_PASSWORD_ERROR(10022, "用户名或密码不正确"),
    USER_DISABLED_ERROR(10023, "该账号已被管理员禁用"),
    SMS_CODE_EXISTS_ERROR(10024, "短信验证码未失效，请勿重复发送"),
    SMS_PHONE_NOT_EXISTS_ERROR(10025, "用户手机号不存在"),

    /**
     * 用户模块相关错误码
     */
    USER_PHONE_EXISTS_ERROR(20001, "该手机号已存在"),
    USER_EMAIL_EXISTS_ERROR(20002, "该邮箱已存在"),
    USER_ACCOUNT_EXISTS_ERROR(20003, "该账号已存在"),
    USER_ADMIN_UPDATE_ERROR(20004, "该用户禁止操作"),
    USER_DETAIL_PER_ERROR(20005, "无权查看该用户信息"),
    USER_AVATAR_UPDATE_ERROR(20006, "用户头像更新异常"),

    /**
     * 角色模块相关错误码
     */
    ROLE_ADMIN_UPDATE_ERROR(20010, "该角色禁止操作"),
    ROLE_USED_ERROR(20011, "该角色已被分配，禁止删除"),
    ROLE_NAME_EXISTS_ERROR(20012, "角色名称已存在"),
    ROLE_KEY_EXISTS_ERROR(20013, "角色权限字符已存在"),

    /**
     * 菜单模块相关错误码
     */
    MENU_NAME_EXISTS_ERROR(20020, "菜单名称已存在"),
    MENU_PERMS_EXISTS_ERROR(20021, "菜单权限字符已存在"),
    MENU_USED_ERROR(20022, "菜单已分配，无法删除"),
    MENU_HAS_CHILD_ERROR(20023, "该菜单下还有其他菜单或资源，无法删除"),

    /**
     * 参数模块相关错误码
     */
    CONFIG_NAME_EXISTS_ERROR(20030, "参数名称已存在"),
    CONFIG_KEY_EXISTS_ERROR(20031, "参数Key已存在"),

    /**
     * 字典模块相关错误码
     */
    DICT_NAME_EXISTS_ERROR(20040, "字典名称已存在"),
    DICT_TYPE_EXISTS_ERROR(20041, "字典类型已存在"),
    DICT_DATA_LABEL_EXISTS_ERROR(20042, "字典标签已存在"),
    DICT_DATA_VALUE_EXISTS_ERROR(20043, "字典键值已存在");


    private final Integer code;
    private final String message;

    ResultCodeEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }
}
